<span id="jsonschema"></span>
<p>
  日期格式规则：
</p>
<pre>
/**
 * 时间对象类型的数据,使用string方式传送,时间格式使用"yyyy-mm-dd hh:mi:ss"格式,为了区别于字符串类型,在前后加上#
 */
 {
    "date":"#2016-12-11 13:11:10#", //Date对象类型
    "datestr":"2016-12-11 13:11:10"   //Date字符串类型
 }
    //前端在使用时,需要把对象类型的数据进行数据类型申明
    <#assign aDatetime = date?datetime>
    ${aDatetime?string("yyyyMMdd HH/mm/ss")}
</pre>
<p>
    参数调用规则：
</p>
<pre>
/**
 * 如果在结果集中需要调用参数中的值，那么需要写参数路径#param#/xxx，xxx为参数的某key
 */
 {
    "msg":"161615656"
 }
 {
    "result":"success",
    "msg":"#param#/msg"
 }
/**
 * 结果中引用本结果的变量数据
 */
 {
  "foo": "Hello",
  "nested": {
    "a": {
      "b": {
        "c": "Mock.js"
      }
    }
  },
  "absolutePath": "@/foo @/nested/a/b/c"
}
Result
{
  "foo": "Hello",
  "nested": {
    "a": {
      "b": {
        "c": "Mock.js"
      }
    }
  },
  "absolutePath": "Hello Mock.js"
}

</pre>
<p>
  校验规则示例：
</p>
<pre>
/**
 * 根元素是一个json对象，有下列属性："name","_BIZCODE","age","list"，其中"_BIZCODE"是必要属性，其它属性可选
 * "name"属性值是字符串，表示姓名
 * "_BIZCODE"属性值是字符串，值只能为"0002"
 * "age"属性是值是整数，表示年龄，值只能在18~50之间
 * "list"属性值是数组，数组的元素为json对象，该数组最小长度为1，
 * 每个数组元素的json对象都必须包含"id"，"name"属性，
 * "id"是的值是字符串，必须为"a"或者"b"
 * "name"的值是字符串，必须匹配"[/w]{2,4}"的正则表达式且长度在2~4。
 */
{
	"type": "object",
	"properties": {
		"name": {
			"type": "string",
			"description": "姓名"
		},
    "_BIZCODE": {
      "type": "string",
      "enum": ["0002"]
    },
		"age": {
      "type": "integer",
			"description": "年龄",
			"minimum": 18,
      "maximum": 50
		},
		"list": {
			"type": "array",
			"items":{
				"type": "object",
				"properties":{
					"id": {
						"type": "string",
						"enum":["a","b"]
					},
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 4,
            "pattern": "[/w]{2,4}"
          }
				},
        "minItems": 1,
				"required": ["id","name"]
			},
      "uniqueItems": false
		}
	},
	"required": ["_BIZCODE"]
}
<h5>对象</h5>
1. type值为"object"
2. properties值为json对象，描述该对象的属性
3. description值为字符串，描述该属性意义
4. required值为数组，数组元素为字符串，表示必须传入的属性
5. description值为字符串，描述该属性意义
<h5>数组</h5>
1. type值为"array"
2. items值为数组，用于描述该数组
3. minItems值为数字，数组最少元素数量
4. maxItems值为数字，数组最大元素数量
5. uniqueItems值为布尔值，数组元素是否唯一
6. description值为字符串，描述该属性意义
<h5>字符串</h5>
1. type值为"string"
2. pattern值为正则表达式的字符串
3. minLength字符串最小长度
4. maxLength字符串最大长度
5. enum枚举属性，值为数组，字符串值必须在数组中
6. description值为字符串，描述该属性意义
<h5>数字</h5>
1. type值为"number"或"integer"
2. minimum值为数字
3. maximum值为数字
4. enum枚举属性，值为数组，数字值必须在数组中
5. description值为字符串，描述该属性意义
</pre>
<p>
  <a href="https://github.com/bugventure/jsen">校验规则配置说明</a> &emsp;
  <a href="http://json-schema.org/latest/json-schema-validation.html">json schema规范介绍</a>
</p>
<p>
  mockjs模板示例：
</p>
<span id="mockjs"></span>
<pre>
  /*
   * @id: 随机数字id，可用@guid生成带字符的guid
   * @cword(2,4): 随机中文单词，长度在2个汉字到4个汉字之间，如果用英文随机单词可用@word
   * "list|2-4": 从对应的数组中随机选择2~4个元素
   * "money|1-10000.2": 整数位从1~10000，小数点保留2位
   * "@province": 随机省份名称
   * "@city": 随机城市名称
   * "@paragraph": 一段中文文字
   * "@datetime": 随机日期，默认格式"yyyy-mm-dd hh:mi:ss"
   * "status|1": 从后面的枚举数组中随机取一个元素
   */
  {
    "id": "@id",
    "name":"@cword(2,4)",
    "list|2-4":[{"name":"小红"},{"name":"小明"}, {"name":"小亮"}, {"name":"小超"}, {"name":"小王"}],
    "money|1-1000.2":1,
    "province": "@province",
    "city": "@city",
    "description":"@paragraph",
    "date": "@datetime",
    "status|1": ["0", "1"]
  }

  <h4><b>数据模板定义</b></h4>
  <h5>Number</h5>
  1. 随机整数，大小在min和max之间： 'name|min-max': number
  示例： { "number|+1": 100 }  =>  { "number" : 48 }

  2. 随机浮点数，整数位在min和max之间，小数位在dmin和dmax之间： 'name|min-max.dmin-dmax': number
  示例： { "number|1-100.1-10": 1 }  =>  { "number": 84.144485659 }
        { "number|123.3": 1 } =>  { "number": 123.887 }

  <h5>Boolean</h5>
  1. 随机布尔值：'name|1': boolean
  示例： { "bool|1": true }  =>  {"bool": true}

  <h5>Object</h5>
  1. 随机返回count个对象：'name|count': object
  示例：{ "object|2": { "310000": "上海市", "320000": "江苏省", "330000": "浙江省", "340000": "安徽省" } }
  =>
  { "object": { "310000": "上海市", "340000": "安徽省" } }
  2. 随机返回min~max之间个对象：'name|min-max': object
  示例：{ "object|2-4": { "110000": "北京市", "120000": "天津市", "130000": "河北省", "140000": "山西省" } }
  =>
  { "object": { "110000": "北京市", "120000": "天津市", "130000": "河北省" } }

  <h5>Array</h5>
  1. 随机返回1个元素：'name|1': array
  示例：{ "array|1": [ "AMD", "CMD", "UMD" ] } =>  { "array": "AMD" }
  2. 轮流返回1个元素：'name|+1': array
  示例：{ "array|+1": [ "AMD", "CMD", "UMD" ] }  =>  如果第一次返回 { "array": "AMD" } ,第二次返回 { "array": "CMD" }
  3. 随机返回n个元素：'name|n-n': array
  示例：{ "array|2-2": [ "AMD", "CMD", "UMD" ] } =>  { "array": [ "AMD", "UMD" ] }

  <h5>RegExp</h5>
  1. 返回一个匹配正则表达的字符串：'name': regexp
  示例：{ 'regexp': /[a-z][A-Z][0-9]/ }  =>  { "regexp": "wD0" }

  <h4><b>占位符定义</b></h4>
  <h5>boolean</h5>
  1. 随机布尔值：@boolean

  <h5>integer</h5>
  1. 随机整数：@integer
  2. 返回随机不超过max的整数：@integer(max)
  3. 返回值在min和max之间的整数：@integer(min,max)

  <h5>lloat</h5>
  1. 随机浮点数：@float
  2. 返回不小于min的随机浮点数：@float(min)
  3. 返回在min和max之间的随机浮点数：@float(min, max)
  4. 返回在min和max之间，小数点位数超过dmin的浮点数：@float(min, max, dmin)
  5. 返回在min和max之间，小数点位数在dmin和dmax之间的浮点数：@float(min, max, dmin, dmax)

  <h5>string</h5>
  1. 返回随机字符串：@string
  2. 返回长度为n的随机字符串：@string(n)
  3. 从可选字符中选取长度为n的随机字符串, 当可选字符串为 lower/upper/number/symbol 时分别返回 小写/大写/数字/符号 随机字符串：@string( pool , n )
  4. 返回长度在min和max之间的字符串：@string( min, max )
  5. 结合3和4：@string( pool, min, max )

  <h5>range</h5>
  1. 返回从0到stop的数组：@range(10)
  2. 返回从start到stop的数组：@range( start, stop )
  3. 返回从start到stop步长为step的数组 @range( start, stop, step )

  <h5>date/time/now</h5>
  1. 返回格式为format的日期字符串：@date(format)
  2. 返回格式为format的时间字符串：@time(format)
  3. 返回格式为format的日期时间字符串：@datetime(format)
  4. 返回给事为format的当前日期/时间字符串：@now(format)

  <h5>image/dataimage</h5>
  1. 返回在线随机图片：@image
  2. 返回大小为size的在线图片：@image(size)
  3. 返回随机图片base64字符串：@dataImage()
  4. 返回大小为size的随机图片base64字符串：@dataImage(size)

  <h5>word/cword/cparagraph</h5>
  1. 返回单词/中文单词/中文段落：@word/@cword/@cparagraph
  2. 返回长度不超过len单词/中文单词/中文段落：@word(len)/@cword(len)/@cparagraph(len)
  3. 返回长度在mix和max之间的单词/中文单词/中文段落：@word( min, max )/@cword( min, max )/@cparagraph( min, max )


  <h4><b>随机数</b></h4>
</pre>
<p>
  <a href="http://mockjs.com/examples.html">mockjs模板介绍</a>
</p>
